{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# HW3_RentListinglnquries_XGBoost_ZTT"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑要调的参数比较多，采用sklearn和xgboost联合的方式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入必要的常用的包\n",
    "from xgboost import  XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "train=pd.read_csv('RentListingInquries_FE_train.csv')\n",
    "test=pd.read_csv('RentListingInquries_FE_test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "#train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 0])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['interest_level'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Number of occurrences')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level)\n",
    "pyplot.xlabel('interest_level')\n",
    "pyplot.ylabel('Number of occurrences')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看出数据已经做过特征处理了，全部已经转换为数值型特征，各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49352, 228)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train=train['interest_level']\n",
    "\n",
    "X_train=train.drop(['interest_level'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#对各类样本按比例采样\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 用内置cv调n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg,X_train,y_train,cv_folds=None,early_stopping_rounds=10):\n",
    "    xgb_param=alg.get_xgb_params()\n",
    "    xgb_param['num_class']=3\n",
    "    \n",
    "    xgtrain=xgb.DMatrix(X_train,label = y_train)\n",
    "    \n",
    "    cvresult=xgb.cv(xgb_param,xgtrain,\n",
    "                    num_boost_round=alg.get_xgb_params()['n_estimators'],\n",
    "                   folds=cv_folds,\n",
    "                   metrics='mlogloss',\n",
    "                   early_stopping_rounds=early_stopping_rounds)\n",
    "    \n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    cvresult.to_csv('2_n_estimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #alg.set_params(n_estimators= n_estimators)\n",
    "    \n",
    "    #alg.fit(X_train,y_train,eval_metric='mlogloss')\n",
    "    return cvresult"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "xgb1 = XGBClassifier(learning_rate=0.1,\n",
    "                    n_estimators=1000,\n",
    "                    max_depth=6,\n",
    "                    min_child_weight=1,\n",
    "                    gamma=0,\n",
    "                    subsample=0.3,\n",
    "                    colsample_bytree=0.8,\n",
    "                    colsample_bylevel=0.7,\n",
    "                    objective= 'multi:softprob',\n",
    "                    seed=3,\n",
    "                    silent= False)\n",
    "cvresult=modelfit(xgb1,X_train,y_train,cv_folds=kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train-mlogloss-mean</th>\n",
       "      <th>train-mlogloss-std</th>\n",
       "      <th>test-mlogloss-mean</th>\n",
       "      <th>test-mlogloss-std</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.037995</td>\n",
       "      <td>0.000343</td>\n",
       "      <td>1.039021</td>\n",
       "      <td>0.000120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.986495</td>\n",
       "      <td>0.000439</td>\n",
       "      <td>0.988387</td>\n",
       "      <td>0.000169</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.942202</td>\n",
       "      <td>0.000799</td>\n",
       "      <td>0.945232</td>\n",
       "      <td>0.000507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.904203</td>\n",
       "      <td>0.000707</td>\n",
       "      <td>0.908244</td>\n",
       "      <td>0.000405</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.871427</td>\n",
       "      <td>0.001046</td>\n",
       "      <td>0.876529</td>\n",
       "      <td>0.000231</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.842965</td>\n",
       "      <td>0.001142</td>\n",
       "      <td>0.848920</td>\n",
       "      <td>0.000458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.817621</td>\n",
       "      <td>0.000889</td>\n",
       "      <td>0.824481</td>\n",
       "      <td>0.000377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.795499</td>\n",
       "      <td>0.000882</td>\n",
       "      <td>0.803301</td>\n",
       "      <td>0.000716</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.776089</td>\n",
       "      <td>0.000871</td>\n",
       "      <td>0.784758</td>\n",
       "      <td>0.000516</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.758203</td>\n",
       "      <td>0.000671</td>\n",
       "      <td>0.767884</td>\n",
       "      <td>0.000694</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.742428</td>\n",
       "      <td>0.000929</td>\n",
       "      <td>0.752968</td>\n",
       "      <td>0.000617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.728510</td>\n",
       "      <td>0.000683</td>\n",
       "      <td>0.739919</td>\n",
       "      <td>0.000926</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.715962</td>\n",
       "      <td>0.000812</td>\n",
       "      <td>0.728358</td>\n",
       "      <td>0.000815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.704721</td>\n",
       "      <td>0.000828</td>\n",
       "      <td>0.718105</td>\n",
       "      <td>0.000796</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.694606</td>\n",
       "      <td>0.000843</td>\n",
       "      <td>0.708740</td>\n",
       "      <td>0.000927</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.685505</td>\n",
       "      <td>0.000810</td>\n",
       "      <td>0.700603</td>\n",
       "      <td>0.001125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.677169</td>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.693010</td>\n",
       "      <td>0.001437</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.669496</td>\n",
       "      <td>0.000621</td>\n",
       "      <td>0.686289</td>\n",
       "      <td>0.001495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.662697</td>\n",
       "      <td>0.001087</td>\n",
       "      <td>0.680370</td>\n",
       "      <td>0.001313</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.656659</td>\n",
       "      <td>0.001265</td>\n",
       "      <td>0.675180</td>\n",
       "      <td>0.001004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.650591</td>\n",
       "      <td>0.001123</td>\n",
       "      <td>0.669881</td>\n",
       "      <td>0.001299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.645416</td>\n",
       "      <td>0.001275</td>\n",
       "      <td>0.665690</td>\n",
       "      <td>0.001623</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.640426</td>\n",
       "      <td>0.001211</td>\n",
       "      <td>0.661570</td>\n",
       "      <td>0.001993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.635886</td>\n",
       "      <td>0.001227</td>\n",
       "      <td>0.657632</td>\n",
       "      <td>0.002040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0.631750</td>\n",
       "      <td>0.001201</td>\n",
       "      <td>0.654274</td>\n",
       "      <td>0.002003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0.627816</td>\n",
       "      <td>0.001141</td>\n",
       "      <td>0.651211</td>\n",
       "      <td>0.002089</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.624273</td>\n",
       "      <td>0.001327</td>\n",
       "      <td>0.648469</td>\n",
       "      <td>0.002141</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0.620937</td>\n",
       "      <td>0.001152</td>\n",
       "      <td>0.645873</td>\n",
       "      <td>0.002282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0.617767</td>\n",
       "      <td>0.001269</td>\n",
       "      <td>0.643405</td>\n",
       "      <td>0.002214</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0.614596</td>\n",
       "      <td>0.001238</td>\n",
       "      <td>0.641116</td>\n",
       "      <td>0.002225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>155</th>\n",
       "      <td>0.486133</td>\n",
       "      <td>0.001089</td>\n",
       "      <td>0.592256</td>\n",
       "      <td>0.002467</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>0.485537</td>\n",
       "      <td>0.001131</td>\n",
       "      <td>0.592159</td>\n",
       "      <td>0.002361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>157</th>\n",
       "      <td>0.484954</td>\n",
       "      <td>0.001201</td>\n",
       "      <td>0.592035</td>\n",
       "      <td>0.002399</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158</th>\n",
       "      <td>0.484436</td>\n",
       "      <td>0.001184</td>\n",
       "      <td>0.592067</td>\n",
       "      <td>0.002384</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>0.483727</td>\n",
       "      <td>0.001056</td>\n",
       "      <td>0.592031</td>\n",
       "      <td>0.002383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>0.483210</td>\n",
       "      <td>0.001040</td>\n",
       "      <td>0.592026</td>\n",
       "      <td>0.002337</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>161</th>\n",
       "      <td>0.482695</td>\n",
       "      <td>0.001006</td>\n",
       "      <td>0.592011</td>\n",
       "      <td>0.002345</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>162</th>\n",
       "      <td>0.482193</td>\n",
       "      <td>0.000966</td>\n",
       "      <td>0.592015</td>\n",
       "      <td>0.002432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>0.481663</td>\n",
       "      <td>0.000977</td>\n",
       "      <td>0.591980</td>\n",
       "      <td>0.002482</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>164</th>\n",
       "      <td>0.481015</td>\n",
       "      <td>0.000966</td>\n",
       "      <td>0.592003</td>\n",
       "      <td>0.002494</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>165</th>\n",
       "      <td>0.480480</td>\n",
       "      <td>0.001026</td>\n",
       "      <td>0.591902</td>\n",
       "      <td>0.002445</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>166</th>\n",
       "      <td>0.479954</td>\n",
       "      <td>0.000980</td>\n",
       "      <td>0.591978</td>\n",
       "      <td>0.002425</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>167</th>\n",
       "      <td>0.479342</td>\n",
       "      <td>0.001032</td>\n",
       "      <td>0.591968</td>\n",
       "      <td>0.002372</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>168</th>\n",
       "      <td>0.478715</td>\n",
       "      <td>0.001032</td>\n",
       "      <td>0.591941</td>\n",
       "      <td>0.002336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>169</th>\n",
       "      <td>0.478087</td>\n",
       "      <td>0.001043</td>\n",
       "      <td>0.591943</td>\n",
       "      <td>0.002378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>170</th>\n",
       "      <td>0.477532</td>\n",
       "      <td>0.001015</td>\n",
       "      <td>0.591915</td>\n",
       "      <td>0.002336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>171</th>\n",
       "      <td>0.477065</td>\n",
       "      <td>0.000987</td>\n",
       "      <td>0.591928</td>\n",
       "      <td>0.002282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>172</th>\n",
       "      <td>0.476467</td>\n",
       "      <td>0.000999</td>\n",
       "      <td>0.591859</td>\n",
       "      <td>0.002223</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>173</th>\n",
       "      <td>0.475740</td>\n",
       "      <td>0.001026</td>\n",
       "      <td>0.591739</td>\n",
       "      <td>0.002287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>0.475271</td>\n",
       "      <td>0.001011</td>\n",
       "      <td>0.591769</td>\n",
       "      <td>0.002335</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>175</th>\n",
       "      <td>0.474764</td>\n",
       "      <td>0.001106</td>\n",
       "      <td>0.591728</td>\n",
       "      <td>0.002256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>176</th>\n",
       "      <td>0.474215</td>\n",
       "      <td>0.001079</td>\n",
       "      <td>0.591723</td>\n",
       "      <td>0.002301</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>177</th>\n",
       "      <td>0.473691</td>\n",
       "      <td>0.001023</td>\n",
       "      <td>0.591615</td>\n",
       "      <td>0.002304</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>178</th>\n",
       "      <td>0.473167</td>\n",
       "      <td>0.001007</td>\n",
       "      <td>0.591579</td>\n",
       "      <td>0.002351</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>179</th>\n",
       "      <td>0.472595</td>\n",
       "      <td>0.001017</td>\n",
       "      <td>0.591661</td>\n",
       "      <td>0.002297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>180</th>\n",
       "      <td>0.472071</td>\n",
       "      <td>0.000958</td>\n",
       "      <td>0.591624</td>\n",
       "      <td>0.002395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>181</th>\n",
       "      <td>0.471471</td>\n",
       "      <td>0.001055</td>\n",
       "      <td>0.591518</td>\n",
       "      <td>0.002373</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>182</th>\n",
       "      <td>0.470949</td>\n",
       "      <td>0.001115</td>\n",
       "      <td>0.591501</td>\n",
       "      <td>0.002410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>183</th>\n",
       "      <td>0.470431</td>\n",
       "      <td>0.001104</td>\n",
       "      <td>0.591471</td>\n",
       "      <td>0.002405</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>184</th>\n",
       "      <td>0.470091</td>\n",
       "      <td>0.001094</td>\n",
       "      <td>0.591450</td>\n",
       "      <td>0.002421</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>185 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     train-mlogloss-mean        ...          test-mlogloss-std\n",
       "0               1.037995        ...                   0.000120\n",
       "1               0.986495        ...                   0.000169\n",
       "2               0.942202        ...                   0.000507\n",
       "3               0.904203        ...                   0.000405\n",
       "4               0.871427        ...                   0.000231\n",
       "5               0.842965        ...                   0.000458\n",
       "6               0.817621        ...                   0.000377\n",
       "7               0.795499        ...                   0.000716\n",
       "8               0.776089        ...                   0.000516\n",
       "9               0.758203        ...                   0.000694\n",
       "10              0.742428        ...                   0.000617\n",
       "11              0.728510        ...                   0.000926\n",
       "12              0.715962        ...                   0.000815\n",
       "13              0.704721        ...                   0.000796\n",
       "14              0.694606        ...                   0.000927\n",
       "15              0.685505        ...                   0.001125\n",
       "16              0.677169        ...                   0.001437\n",
       "17              0.669496        ...                   0.001495\n",
       "18              0.662697        ...                   0.001313\n",
       "19              0.656659        ...                   0.001004\n",
       "20              0.650591        ...                   0.001299\n",
       "21              0.645416        ...                   0.001623\n",
       "22              0.640426        ...                   0.001993\n",
       "23              0.635886        ...                   0.002040\n",
       "24              0.631750        ...                   0.002003\n",
       "25              0.627816        ...                   0.002089\n",
       "26              0.624273        ...                   0.002141\n",
       "27              0.620937        ...                   0.002282\n",
       "28              0.617767        ...                   0.002214\n",
       "29              0.614596        ...                   0.002225\n",
       "..                   ...        ...                        ...\n",
       "155             0.486133        ...                   0.002467\n",
       "156             0.485537        ...                   0.002361\n",
       "157             0.484954        ...                   0.002399\n",
       "158             0.484436        ...                   0.002384\n",
       "159             0.483727        ...                   0.002383\n",
       "160             0.483210        ...                   0.002337\n",
       "161             0.482695        ...                   0.002345\n",
       "162             0.482193        ...                   0.002432\n",
       "163             0.481663        ...                   0.002482\n",
       "164             0.481015        ...                   0.002494\n",
       "165             0.480480        ...                   0.002445\n",
       "166             0.479954        ...                   0.002425\n",
       "167             0.479342        ...                   0.002372\n",
       "168             0.478715        ...                   0.002336\n",
       "169             0.478087        ...                   0.002378\n",
       "170             0.477532        ...                   0.002336\n",
       "171             0.477065        ...                   0.002282\n",
       "172             0.476467        ...                   0.002223\n",
       "173             0.475740        ...                   0.002287\n",
       "174             0.475271        ...                   0.002335\n",
       "175             0.474764        ...                   0.002256\n",
       "176             0.474215        ...                   0.002301\n",
       "177             0.473691        ...                   0.002304\n",
       "178             0.473167        ...                   0.002351\n",
       "179             0.472595        ...                   0.002297\n",
       "180             0.472071        ...                   0.002395\n",
       "181             0.471471        ...                   0.002373\n",
       "182             0.470949        ...                   0.002410\n",
       "183             0.470431        ...                   0.002405\n",
       "184             0.470091        ...                   0.002421\n",
       "\n",
       "[185 rows x 4 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cvresult"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "\n",
    "fig = pyplot.figure(figsize=(6, 6), dpi=100)        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "#pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从结论中可以看出n_estimators的取值在185，不知道为什么明明设置了label却没有显示出来，early_stopping_rounds 不是还没有收敛到10么，怎么就计算完了。。接下来调其他参数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 调整 max_depth & min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_2=dict(max_depth=max_depth,min_child_weight=min_child_weight)\n",
    "param_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "gridcv_2.best_params_: {'max_depth': 7, 'min_child_weight': 5}\n",
      "gridcv_2.best_score_: -0.5882501751854031\n"
     ]
    }
   ],
   "source": [
    "xgb2 = XGBClassifier(learning_rate=0.1,\n",
    "                    n_estimators=185,\n",
    "                    gamma=0,\n",
    "                    subsample=0.3,\n",
    "                    colsample_bytree=0.8,\n",
    "                    colsample_bylevel=0.7,\n",
    "                    objective= 'multi:softprob',\n",
    "                    seed=3,\n",
    "                    silent= False)\n",
    "\n",
    "gridcv_2=GridSearchCV(xgb2,param_grid=param_2,scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gridcv_2.fit(X_train , y_train)\n",
    "\n",
    "print('gridcv_2.best_params_:',gridcv_2.best_params_)\n",
    "print('gridcv_2.best_score_:',gridcv_2.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Log Loss')"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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d/onwKNACvCK+wK4E/iXiFwObAW+79WxGWOMaZg4D2MdnbKysjQ/Pz/R1TDGmDZFRFaralZD5eyT/MYYYzxhAWOMMcYTXj6mbIxpZyoqKigsLOTQoUOJroppAR06dGDgwIEEAoEmrW8BY4yJW2FhIZ07dyYjIwO3G0DTTqkqxcXFFBYWMmTIkCZtwy6RGWPidujQIXr27GnhchQQEXr27HlErVULGGNMo1i4HD2O9HttAWOMMcYTFjDGmDZjz549/O1vf2vSurNnz6a0tLSZa9Q8xo0bR1M/k/fCCy+wcePGRm3r0KFDZGdnc+KJJzJixAhuueWWJu27IRYwxpg2o70GzJGIDph4JCcn88Ybb7B27VoKCgpYtGgRK1asaPa62VNkxpgmufWlDWzcvq9Zt3lC/y7c8p0RdS6/6aab+OSTT8jMzGTChAn07t2bf/3rX5SVlTFt2jRuvfVWSkpKuPDCCyksLKSqqorf/va37Nixg+3btzN+/HjS0tJYunRpzO136tSJa6+9ltdee43u3btzxx138Mtf/pKtW7cye/ZspkyZwueff84Pf/hDSkpKALj33ns57bTTeP7555kzZw5Llizhq6++4swzz2TZsmX07du31n4OHjzIZZddxsaNGxk+fDgHDx4ML1u8eDG33HILZWVlHHvssTzyyCN06tSJjIwMfvCDH4Tr/sQTT7Bz504WLFjAW2+9xe23386zzz4LwNNPP80111zDnj17eOihhzj99NNr7F9E6NSpE+A8el5RUeHJvTVrwRhj2ow777yTY489loKCAiZMmMCmTZtYuXIlBQUFrF69mmXLlrFo0SL69+/P2rVrWb9+PZMnT+a6666jf//+LF26tM5wASgpKWHcuHGsXr2azp0785vf/IYlS5bw/PPP87vf/Q6A3r17s2TJEtasWcP8+fO57rrrAJg2bRp9+/Zlzpw5XHnlldx6660xwwXgvvvuIzU1lXXr1vHrX/+a1atXA7Br1y5uv/12XnvtNdasWUNWVhZ33313eL0uXbqwcuVKZs2axfXXX89pp53GlClT+NOf/kRBQQHHHnssAJWVlaxcuZLZs2dz6623ArB9+3bOOeec8LaqqqrIzMykd+/eTJgwgZycnCP4zsRmLRhjTJPU19JoCYsXL2bx4sWcdNJJABw4cIBNmzZx+umn84tf/IIbb7yR8847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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = gridcv_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gridcv_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gridcv_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gridcv_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gridcv_2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "#pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "粗调后的max_depth: 7, min_child_weight: 5，下面进行精调将步长降为1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [6, 7, 8], 'min_child_weight': [4, 5, 6]}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = [6,7,8]\n",
    "min_child_weight = [4,5,6]\n",
    "param_2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "gridcv_2.best_params_: {'max_depth': 7, 'min_child_weight': 4}\n",
      "gridcv_2.best_score_: -0.5876444516863173\n"
     ]
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(learning_rate=0.1,\n",
    "                    n_estimators=185,\n",
    "                    gamma=0,\n",
    "                    subsample=0.3,\n",
    "                    colsample_bytree=0.8,\n",
    "                    colsample_bylevel=0.7,\n",
    "                    objective= 'multi:softprob',\n",
    "                    seed=3,\n",
    "                    silent= False)\n",
    "\n",
    "gridcv_2_2=GridSearchCV(xgb2_2,param_grid=param_2_2,scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gridcv_2_2.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "gridcv_2_2.best_params_: {'max_depth': 7, 'min_child_weight': 4}\n",
      "gridcv_2_2.best_score_: -0.5876444516863173\n"
     ]
    }
   ],
   "source": [
    "print('gridcv_2_2.best_params_:',gridcv_2_2.best_params_)\n",
    "print('gridcv_2_2.best_score_:',gridcv_2_2.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([234.81193008, 242.66221519, 253.39411273, 294.78658557,\n",
       "        292.54464211, 286.59173574, 335.38077679, 331.25621848,\n",
       "        254.63147826]),\n",
       " 'std_fit_time': array([2.37719845, 7.26688784, 3.82226184, 3.24462664, 3.99966943,\n",
       "        1.74603631, 6.93697333, 6.0250743 , 5.03279684]),\n",
       " 'mean_score_time': array([1.35522289, 0.91047764, 1.63450828, 1.36600118, 1.49464712,\n",
       "        1.17391114, 1.66899104, 1.74536939, 0.89580746]),\n",
       " 'std_score_time': array([0.54704219, 0.31446393, 0.42821841, 0.46216935, 0.43809139,\n",
       "        0.38179047, 0.37278051, 0.4789679 , 0.41111094]),\n",
       " 'param_max_depth': masked_array(data=[6, 6, 6, 7, 7, 7, 8, 8, 8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[4, 5, 6, 4, 5, 6, 4, 5, 6],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 6, 'min_child_weight': 4},\n",
       "  {'max_depth': 6, 'min_child_weight': 5},\n",
       "  {'max_depth': 6, 'min_child_weight': 6},\n",
       "  {'max_depth': 7, 'min_child_weight': 4},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 6},\n",
       "  {'max_depth': 8, 'min_child_weight': 4},\n",
       "  {'max_depth': 8, 'min_child_weight': 5},\n",
       "  {'max_depth': 8, 'min_child_weight': 6}],\n",
       " 'split0_test_score': array([-0.58325131, -0.58313857, -0.58319348, -0.58107143, -0.58194025,\n",
       "        -0.58200997, -0.58391068, -0.58530675, -0.58521547]),\n",
       " 'split1_test_score': array([-0.58863552, -0.58809215, -0.58742715, -0.58691135, -0.58661388,\n",
       "        -0.58746222, -0.59027266, -0.59234873, -0.58999549]),\n",
       " 'split2_test_score': array([-0.58999352, -0.59081733, -0.58999999, -0.58866567, -0.58867927,\n",
       "        -0.58849436, -0.59158563, -0.59153581, -0.59124152]),\n",
       " 'split3_test_score': array([-0.59225338, -0.59091487, -0.59054091, -0.59009187, -0.59141887,\n",
       "        -0.59003876, -0.59194107, -0.59338706, -0.59066446]),\n",
       " 'split4_test_score': array([-0.59404522, -0.59359725, -0.59307314, -0.59148309, -0.59259992,\n",
       "        -0.5928278 , -0.59594989, -0.59589835, -0.59527804]),\n",
       " 'mean_test_score': array([-0.58963552, -0.58931177, -0.58884668, -0.58764445, -0.58825018,\n",
       "        -0.58816634, -0.59073167, -0.59169508, -0.5904787 ]),\n",
       " 'std_test_score': array([0.00369278, 0.0035439 , 0.00334769, 0.00361965, 0.00378514,\n",
       "        0.00357034, 0.00390268, 0.00351545, 0.0032119 ]),\n",
       " 'rank_test_score': array([6, 5, 4, 1, 3, 2, 8, 9, 7], dtype=int32),\n",
       " 'split0_train_score': array([-0.49673198, -0.49931589, -0.50260575, -0.45854329, -0.46425259,\n",
       "        -0.46982033, -0.41578606, -0.42302836, -0.43001194]),\n",
       " 'split1_train_score': array([-0.49590301, -0.49834497, -0.49987838, -0.45786635, -0.462397  ,\n",
       "        -0.46718335, -0.41602216, -0.42371244, -0.42940521]),\n",
       " 'split2_train_score': array([-0.4969256 , -0.49953455, -0.50249601, -0.45776725, -0.46282561,\n",
       "        -0.46566033, -0.41814587, -0.42588901, -0.43297658]),\n",
       " 'split3_train_score': array([-0.49427566, -0.49740111, -0.49952171, -0.45598207, -0.46069607,\n",
       "        -0.46330236, -0.41503869, -0.42367611, -0.42764044]),\n",
       " 'split4_train_score': array([-0.49636537, -0.49911516, -0.50180721, -0.45944755, -0.4632709 ,\n",
       "        -0.4677527 , -0.41624239, -0.42309153, -0.43028918]),\n",
       " 'mean_train_score': array([-0.49604032, -0.49874234, -0.50126181, -0.4579213 , -0.46268843,\n",
       "        -0.46674381, -0.41624703, -0.42387949, -0.43006467]),\n",
       " 'std_train_score': array([0.00094875, 0.00078132, 0.0013091 , 0.0011405 , 0.00117125,\n",
       "        0.00217686, 0.00103235, 0.00104429, 0.00172303])}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gridcv_2_2.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'- Log Loss')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = gridcv_2_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gridcv_2_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gridcv_2_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gridcv_2_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gridcv_2_2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(min_child_weight):\n",
    "    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "#pyplot.savefig( 'max_depth_vs_min_child_weght2.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "精调之后发现min_child_weight最佳有所改变，变为4，但是在图中好像是5比较好吧？这个图不是看的太懂。。。接下来调正则参数，将已经调好的dpth和child带进去"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 调正则参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1, 1.5, 2], 'reg_lambda': [0.5, 1, 2]}"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 1,1.5, 2]\n",
    "reg_lambda = [0.5, 1, 2]\n",
    "\n",
    "param_reg=dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_reg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.6, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=7, min_child_weight=4, missing=None, n_estimators=185,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.7),\n",
       "       fit_params=None, iid=True, n_jobs=-1,\n",
       "       param_grid={'reg_alpha': [1, 1.5, 2], 'reg_lambda': [0.5, 1, 2]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb_reg = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=185,  #参数调整得到的n_estimators最优值\n",
    "        max_depth=7,#根据前面调整的depth和childweight选择这里的参数\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.7,\n",
    "        colsample_bytree=0.6,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch_reg = GridSearchCV(xgb_reg, param_grid = param_reg, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch_reg.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.580634 using {'reg_alpha': 1, 'reg_lambda': 1}\n"
     ]
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch_reg.best_score_, gsearch_reg.best_params_))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "两个正则项都是1，本来应该再调一下alpha的，因为是在边上，但是奈何电脑实在跑的太慢，这里就不调了..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 再调一次弱学习器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将上面调好的参数带入，重新调整一次弱学习器数目\n",
    "xgb_nes = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=7,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        reg_alpha=1,\n",
    "        reg_lambda=1,\n",
    "        silent=False,\n",
    "        seed=3)\n",
    "\n",
    "cvresult_2=modelfit(xgb_nes, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_estimators 141\n"
     ]
    }
   ],
   "source": [
    "print('n_estimators',cvresult_2.shape[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "弱学习器的数目减少到了141，继续行列重采样的参数调整"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 行列重采样参数调整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8],\n",
       " 'colsample_bytree': [0.6, 0.7, 0.8, 0.9]}"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "\n",
    "param_sam = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_sam"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=7, min_child_weight=4, missing=None, n_estimators=141,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=1, reg_lambda=1, scale_pos_weight=1, seed=3, silent=False,\n",
       "       subsample=0.3),\n",
       "       fit_params=None, iid=True, n_jobs=-1,\n",
       "       param_grid={'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8], 'colsample_bytree': [0.6, 0.7, 0.8, 0.9]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将上面已经调好的参数代入\n",
    "xgb_sam = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=141,  \n",
    "        max_depth=7,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        reg_alpha=1,\n",
    "        reg_lambda=1,\n",
    "        silent=False,\n",
    "        seed=3)\n",
    "\n",
    "gsearch_sam=GridSearchCV(xgb_sam, param_grid = param_sam, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "\n",
    "gsearch_sam.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.582125 using {'colsample_bytree': 0.9, 'subsample': 0.8}\n"
     ]
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch_sam.best_score_, gsearch_sam.best_params_))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个分数好像又变小了，可能是跟弱学习器减少了有关系吧，这样子的话，是选择第一次的n_estimators好还是选择第二次的好，colsample_bytree': 0.9, 'subsample': 0.8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = gsearch_sam.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch_sam.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch_sam.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch_sam.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch_sam.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 2min 25s, sys: 176 ms, total: 2min 25s\n",
      "Wall time: 2min 25s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.8,\n",
       "       colsample_bytree=0.9, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=7, min_child_weight=4, missing=None, n_estimators=141,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=1, reg_lambda=1, scale_pos_weight=1, seed=3, silent=False,\n",
       "       subsample=0.8)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb_test = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=141,  \n",
    "        max_depth=7,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel=0.8,\n",
    "        objective= 'multi:softprob',\n",
    "        reg_alpha=1,\n",
    "        reg_lambda=1,\n",
    "        silent=False,\n",
    "        seed=3)\n",
    "\n",
    "%time xgb_test.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 2.7 s, sys: 136 ms, total: 2.83 s\n",
      "Wall time: 2.87 s\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    }
   ],
   "source": [
    "%time preds=xgb_test.predict(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "test['pred_interest_level']=preds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "#生产测试结果文件\n",
    "test.to_csv('RentListinglnquries_XGBoost_pred.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Number of occurrences')"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(test.pred_interest_level)\n",
    "pyplot.xlabel('pre_interest_level')\n",
    "pyplot.ylabel('Number of occurrences')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "预测结果分布和训练集大致相当，应该还行吧，感觉xgboost就是各种调参数，老年机实在跑不动了"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
